local Neuron = require("Neuron");

-- 定义 Layer 对象
local Layer = {}
Layer.__index = Layer

-- 构造函数：创建一个新的层
function Layer:new(input_size, num_neurons, use_activation)
    local layer = setmetatable({}, self)
    layer.neurons = {}
    for i = 1, num_neurons do
        table.insert(layer.neurons, Neuron:new(input_size, use_activation))
    end
    return layer
end

-- 前向传播：计算整个层的输出
function Layer:forward(inputs)
    local outputs = {}
    for i, neuron in ipairs(self.neurons) do
        outputs[i] = neuron:forward(inputs)
    end
    return outputs
end

-- 反向传播：更新整个层的权重和偏置
function Layer:backward(inputs, errors, learning_rate)
    for i, neuron in ipairs(self.neurons) do
        neuron:backward(inputs, errors[i], learning_rate)
    end
end

return Layer;